﻿using Sustainalytics.ClientDW.Entities;
using System;
using System.Collections.Generic;

namespace Sustainalytics.ScreeningTool.BL.Model
{
    //model for DataPoints
    public class CriteriaTypeIsNotScreenable
    {
        public Guid Id { get; set; }//TemplateCriteriaId
        public string Name { get; set; }
        public bool IsOn { get; set; }
        public bool IsDataPoint { get; set; }
    }

    public class CriteriaTypeOneDto
    {
        public Guid Id { get; set; }//TemplateCriteriaId
        public int MaxValue { get; set; }
        public int MinValue { get; set; }
    }

    public class CriteriaTypeTwoDto
    {
        public List<CriteriaType2IsScreenable> IsScreenableCriteriaItems { get; set; }
        public List<CriteriaTypeIsNotScreenable> IsNotScreenableCriteriaItems { get; set; }
    }

    public class CriteriaType2IsScreenable
    {
        public Guid Id { get; set; }//TemplateCriteriaId
        public string Name { get; set; }
        public int? Score { get; set; }
    }
    
    public class CriteriaType3IsScreenable
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
        public List<string> SelectedItems { get; set; }
    }

    public class CriteriaTypeThreeDto
    {
        public List<CriteriaType3IsScreenable> IsScreenableCriteriaItems { get; set; }
        public List<CriteriaTypeIsNotScreenable> IsNotScreenableCriteriaItems { get; set; }
    }

    public class CriteriaTypeFourDto
    {
        public Guid CriteriaLevel3Id { get; set; }
        public Guid CriteriaLevel2Id { get; set; }
        public Guid? Id { get; set; }
        public string Name { get; set; }
        public Guid? FilterGroupId { get; set; }
        public List<CriteriaTypeFourCategoryDto> SelectedCategories { get; set; }
        public List<CriteriaTypeIsNotScreenable> IsNotScreenableCriteriaItems { get; set; }
        public string ClaimSymbol { get; set; }
    }

    public class CriteriaTypeFourCategoryDto
    {
        public Guid Id { get; set; }
        public string CategoryOfInvolvement { get; set; }
        public bool IsSignificantOwnership { get; set; }
        public bool IsInvolvement { get; set; }
        public bool RevenueRange { get; set; }
        public double Start { get; set; }
        public double Stop { get; set; }
        public string Name { get; set; }
        public string CategorySymbol { get; set; }
    }

    public class CriteriaTypeFiveDto
    {
        public List<CriteriaType5IsScreenable>IsScreenableCriteriaItems { get; set; }
        public List<CriteriaTypeIsNotScreenable> IsNotScreenableCriteriaItems { get; set; }
    }

    public class CriteriaType5IsScreenable
    {
        public Guid Id { get; set; }//TemplateCriteriaId
        public string Name { get; set; }
        public int? Score { get; set; }
        public List<AnswerCategoryDto> AnswerCategories { get; set; }
    }

    public class CriteriaTypeSixDto
    {
        public Guid Id { get; set; }//TemplateCriteriaId
        public int MaxValue { get; set; }
        public int MinValue { get; set; }
        public bool Removed { get; set; }
        public List<CriteriaTypeIsNotScreenable> IsNotScreenableCriteriaItems { get; set; }
    }

    public class CriteriaTypeSevenDto
    {
        public List<CriteriaType7IsScreenable> IsScreenableCriteriaItems { get; set; }
        public List<CriteriaTypeIsNotScreenable> IsNotScreenableCriteriaItems { get; set; }
    }

    public class CriteriaType7IsScreenable
    {
        public Guid Id { get; set; }//TemplateCriteriaId
        public string Name { get; set; }
        public List<string> SelectedItems { get; set; }
    }

    public class CriteriaTypeSevenItem {
        public Guid Id { get; set; }
        public string Name { get; set; }
    }

    public class CriteriaTypeEightDto
    {
        public List<CriteriaType8IsScreenable> IsScreenableCriteriaItems { get; set; }
        public List<CriteriaTypeIsNotScreenable> IsNotScreenableCriteriaItems { get; set; }
       
    }

    public class CriteriaType8IsScreenable
    {
        public Guid Id { get; set; }//TemplateCriteriaId
        public string Name { get; set; }//TemplateCriteriaName
        public int? Score { get; set; }
    }

    public class CriteriaTypeNineDto
    {
        public List<CriteriaType9IsScreenable> IsScreenableCriteriaItems { get; set; }
        public List<CriteriaTypeIsNotScreenable> IsNotScreenableCriteriaItems { get; set; }
    }

    public class CriteriaTypeTenDto
    {
        public List<CriteriaTypeIsNotScreenable> IsNotScreenableCriteriaItems { get; set; }
    }
    
    public class CriteriaType16Dto
    {
        public Guid Id { get; set; }
        public int MaxValue { get; set; }
        public int MinValue { get; set; }
        public bool Removed { get; set; }
        public List<CriteriaTypeIsNotScreenable> IsNotScreenableCriteriaItems { get; set; }
    }

    public class CriteriaType17Dto
    {
        public List<CriteriaType17IsScreenable> IsScreenableCriteriaItems { get; set; }
        public List<CriteriaTypeIsNotScreenable> IsNotScreenableCriteriaItems { get; set; }
    }

    public class CriteriaType9IsScreenable
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
        public int? Score { get; set; }
    }

    public class CriteriaType17IsScreenable
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
        public int? Score { get; set; }
        public List<AnswerCategoryDto> AnswerCategories { get; set; }
    }

    public class CriteriaType25Dto
    {
        public List<CriteriaType25IsScreenable> IsScreenableCriteriaItems { get; set; }
        public List<CriteriaTypeIsNotScreenable> IsNotScreenableCriteriaItems { get; set; }
    }

    public class CriteriaType25IsScreenable
    {
        public Guid Id { get; set; }//TemplateCriteriaId
        public string Name { get; set; }
        public int? Score { get; set; }
        public List<AnswerCategoryDto> AnswerCategories { get; set; }
    }

    #region SelectedValue serialize
    public class SelectedValueMinMax
    {
        public int MinValue { get; set; }
        public int MaxValue { get; set; }
    }

    public class SelectedValueScore
    {
        public int Score { get; set; }
    }

    public class SelectedValueSelectedItems
    {
        public List<string> SelectedItems { get; set; }
    }

    #endregion
}
